package com.dxf.chepter10

/**
 *  一个集合 list(1,2,3,4,"abc")
 *  1 将集合list中的所有数组+1,并返回新集合
 *  2 忽略掉非数字的元素,即 返回的新集合 为 (2,3,4,5)
 * =================================================
 *
 *  偏函数介绍:
 *      1 在对符合某个条件,而不是所有情况下进行逻辑操作时,使用偏函数是一个不错的选择
 *      2 将包在大括号内的一组case 语句封装为函数,我们称为偏函数,只会作用于指定类型的参数或者指定范围的参数进行计算,超出的都会被忽略
 *      3 偏函数在scala中是一个特质PartialFunction
 *
 *  偏函数的理解:
 *
 *  1  偏函数的用法就是 先过滤在操作
 *  2 偏函数类 PartialFunction
 *  3 偏函数 类中重写2个方法  isDefinedAt() 和  apply()  ,  isDefinedAt返回true的再执行apply()
 *  4 偏函数使用是 new  PartialFunction[输入的类型,返回的类型]
 *
 *
 *
 *
 */
object T122_偏函数介绍入门 {

  def main(args: Array[String]): Unit = {

    //偏函数解决
    val list = List(1, 2, 3, 4, "abc")

    //1 创建偏函数,传入int,返回 any
    //2 重写 isDefinedAt()和apply() 方法
    //3 如果 isDefinedAt()返回true 则执行apply()方法
    val parFun: PartialFunction[Any,Int ] = new PartialFunction[Any, Int] {
      override def isDefinedAt(x: Any): Boolean = x.isInstanceOf[Int]

      override def apply(v1: Any): Int = v1.asInstanceOf[Int] + 1
    }

    //使用偏函数
    //说明 不能用map,会报错
    val list2: List[Int] = list.collect(parFun)
    println(list2)


  }



}
